﻿#pragma once

#include "RobotHand.h"
#include "../common_tool.h"
#

class RobotHandTest : public RobotHand
{
	Q_OBJECT

public:
	RobotHandTest(QObject* parent);
	~RobotHandTest();

	/****************************************************************************
	 * 功能: 初始化函数
	 * 传参: 初始化参数
	 * 返回值: 初始化并连接成功返回0, 参数错误返回 -1， 其它返回-2
	 ****************************************************************************/
	virtual int Init(const RobotParam& param) override;

	/****************************************************************************
	 * 功能: 重连接口
	 * 传参:
	 * 返回值: 重连是否成功返回0， 状态端口失败返回-1，命令端口失败返回-2, 全部失败返回-3
	 ****************************************************************************/
	virtual int Reconnecte() override;
	virtual int GetConnectedState() override;
	/****************************************************************************
	 * 功能: 停止接口，机械手停止运动并清理运动轨迹
	 * 传参:
	 * 返回值:
	 ****************************************************************************/
	virtual bool Stop() override;

	/****************************************************************************
	 * 功能: 暂停/恢复接口，机械手暂停，不清理轨迹，机械手恢复后继续运动
	 * 传参:
	 * 返回值:
	 ****************************************************************************/
	virtual bool Pause() override;
	virtual bool Resume() override;

	/****************************************************************************
	 * 功能: 复位机械手，清除机械手程序错误，以及点位信息
	 * 传参:
	 * 返回值:
	 ****************************************************************************/
	virtual bool Reset() override;

	/****************************************************************************
	 * 功能: 设置和获取当前的TCPBase(未启用)
	 * 传参:
	 * 返回值:
	 ****************************************************************************/
	virtual bool SetTcpBase(const QString& info) override;
	virtual QString GetTcpBase() override;

	/****************************************************************************
	 * 功能: 设置DO
	 * 传参: index: DO编号(1-n), value: true=1,false=0;
	 * 返回值:
	 ****************************************************************************/
	virtual bool SetDo(unsigned int index, bool value) override;

	/****************************************************************************
	 * 功能: 夹具动作/预定义动作
	 * 传参: index: 预先定义的动作编号（由机械手内部程序定义）
	 * 返回值:
	 ****************************************************************************/
	virtual bool SetGrip(unsigned int index, const GripParam& param = {}) override;

	/****************************************************************************
	 * 功能: 移动指令
	 * 传参:
	 * 返回值:
	 ****************************************************************************/
	virtual bool MoveJL(const MoveJLInfo& moves) override;

	/****************************************************************************
	 * 功能: 特殊指令
	 * 传参:
	 * 返回值:
	 ****************************************************************************/
	virtual bool ExecCmd(const QString& cmd, const QString& para, QString& result) override;


private:
	void SendRobotStateData();


private:
	QTimer* m_stateTimer = nullptr;
	bool m_stop = false;
	bool m_pause = false;
	Position m_pos = {};
	QString m_do = "11110000111100000000000011110000";
	QString m_di = "11110000111100000000000011110000";
	QList<QPair<int, Position>> m_path;
	int times = 0;
};
